package com.zzz.demo.test;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * @author ZZZ
 * @version 1.0
 * @date 2018/10/29 029
 */
public class ReflectDemo {

//    public ReflectDemo() {
//    }

    public static void main(String[] args) {
        // 一、正常调用
        ReflectDemo reflectDemo = new ReflectDemo();
        reflectDemo.printTest();
        // 二、反射调用
        try {
            Class clazz = Class.forName("com.zzz.demo.test.ReflectDemo");
            Object obj = clazz.newInstance();
            Method method = clazz.getDeclaredMethod("printTest", null);
            method.invoke(obj,null);
            // 三、反射调用（obj 为 null）
            method.invoke(null, null);
            // 四、反射调用（入参为当前类）
            method.invoke(ReflectDemo.class, null);
        } catch (ClassNotFoundException
                | IllegalAccessException
                | InstantiationException
                | NoSuchMethodException
                | InvocationTargetException e) {
            e.printStackTrace();
        }
    }

    private static void printTest() {
        System.out.println("Hello World");
    }

}
